package edu.ynu.se.xiecheng.achitectureclass.digitalagriculture.service;

import edu.ynu.se.xiecheng.achitectureclass.digitalagriculture.dao.DeviceSoilRecordDAO;
import edu.ynu.se.xiecheng.achitectureclass.digitalagriculture.entity.DeviceSoilRecordEntity;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 设备土壤记录服务类
 * 设计原则体现：
 * 1. 单一职责原则(SRP) - 该类专注于设备土壤记录的业务逻辑
 * 2. 依赖注入原则(DI) - 通过构造函数注入所需的DAO
 */
@Service
public class DeviceSoilRecordService {

    private final DeviceSoilRecordDAO deviceSoilRecordDAO;

    public DeviceSoilRecordService(DeviceSoilRecordDAO deviceSoilRecordDAO) {
        this.deviceSoilRecordDAO = deviceSoilRecordDAO; // 依赖注入
    }

    /**
     * 获取最新土壤数据
     * 设计原则体现：
     * 1. 高内聚 - 方法功能单一，专注于获取最新土壤数据
     * 2. 关注点分离 - 数据访问逻辑与业务逻辑分离
     */
    public String getZztDat(String name) {
        return deviceSoilRecordDAO.getZztDat(name);
    }

    public String getTrDat(String date, String name) {
        return deviceSoilRecordDAO.getTrDat(date, name);
    }

    /**
     * 获取最新土壤数据
     * 设计原则体现：
     * 1. 高内聚 - 方法功能单一，专注于获取最新土壤数据
     * 2. 关注点分离 - 数据访问逻辑与业务逻辑分离
     */
    public List<DeviceSoilRecordEntity> getLastData() {
        return deviceSoilRecordDAO.getLastData(); // 调用DAO层方法
    }

    /**
     * 批量保存土壤记录
     * 设计原则体现：
     * 1. 事务管理 - 通过服务层管理数据的一致性
     * 2. 单一职责原则 - 方法只负责保存土壤记录
     */
    public void saveBatch(List<DeviceSoilRecordEntity> list) {
        deviceSoilRecordDAO.saveAll(list); // 调用DAO层方法
    }

    /**
     * 分页查询土壤记录
     * 设计原则体现：
     * 1. 开放封闭原则(OCP) - 通过参数化支持不同的分页需求
     * 2. 迪米特原则 - 只与直接依赖的DAO交互
     */
    public Page<DeviceSoilRecordEntity> page(Integer current, Integer size) {
        return deviceSoilRecordDAO.findAll(PageRequest.of(current, size)); // 调用DAO层方法
    }
}
